import request from "@/utils/request";

const COMMON_BASE_URL = "/api";

/**
 * 时间设置 API
 */
export const HMI_TIME_SETTING_API = {
  /**
   * 查询时间设置
   * @param cpu CPU 编号
   * @returns Promise<TimeSettingInfo[]>
   */
  fetchTimeSetting: (cpu: number) => {
    return request<any, TimeSettingInfo[]>({
      url: `${COMMON_BASE_URL}/time/${cpu}`,
      method: "get",
    });
  },

  /**
   * 整定时间设置
   * @param cpu CPU 编号
   * @param data 时间设置数据
   * @returns Promise<TimeSettingUpdateResponse>
   */
  updateTimeSetting: (cpu: number, data: TimeSettingUpdateRequest[]) => {
    return request<any, TimeSettingUpdateResponse>({
      url: `${COMMON_BASE_URL}/time/${cpu}`,
      method: "post",
      data,
    });
  },
};

/**
 * 时间设置信息接口
 */
export interface TimeSettingInfo {
  /** 时区 */
  Zone: number;
  /** 年份 */
  Year: number;
  /** 月份 */
  Month: number;
  /** 日期 */
  Day: number;
  /** 小时 */
  Hour: number;
  /** 分钟 */
  Minute: number;
  /** 秒 */
  Sec: number;
}

/**
 * 时间设置更新请求接口
 */
export interface TimeSettingUpdateRequest {
  /** 时区 */
  zone: number;
  /** 年份 */
  year: number;
  /** 月份 */
  month: number;
  /** 日期 */
  day: number;
  /** 小时 */
  hour: number;
  /** 分钟 */
  minute: number;
  /** 秒 */
  sec: number;
}

/**
 * 时间设置更新成功响应接口
 */
export interface TimeSettingUpdateSuccessResponse {
  /** CPU 编号 */
  cpu: number;
  /** 状态 */
  status: string;
  /** 消息 */
  message?: string;
}

/**
 * 时间设置更新失败响应接口
 */
export interface TimeSettingUpdateErrorResponse {
  /** 错误信息 */
  error: string;
  /** 错误消息 */
  message: string;
  /** 错误代码 */
  code: number;
}

/**
 * 时间设置更新响应接口
 */
export type TimeSettingUpdateResponse = 
  | TimeSettingUpdateSuccessResponse 
  | TimeSettingUpdateErrorResponse;

/**
 * 时间设置表单数据接口
 */
export interface TimeSettingFormData {
  /** 时区 */
  zone: number;
  /** 年份 */
  year: number;
  /** 月份 */
  month: number;
  /** 日期 */
  day: number;
  /** 小时 */
  hour: number;
  /** 分钟 */
  minute: number;
  /** 秒 */
  sec: number;
}

/**
 * 时间设置验证规则
 */
export interface TimeSettingValidationRules {
  zone: { min: number; max: number };
  year: { min: number; max: number };
  month: { min: number; max: number };
  day: { min: number; max: number };
  hour: { min: number; max: number };
  minute: { min: number; max: number };
  sec: { min: number; max: number };
}

/**
 * 默认时间设置验证规则
 */
export const DEFAULT_TIME_VALIDATION_RULES: TimeSettingValidationRules = {
  zone: { min: -12, max: 12 },
  year: { min: 2000, max: 2099 },
  month: { min: 1, max: 12 },
  day: { min: 1, max: 31 },
  hour: { min: 0, max: 23 },
  minute: { min: 0, max: 59 },
  sec: { min: 0, max: 59 },
};
